package com.lyy.mybatis.sensitive.annotation;

import com.lyy.mybatis.sensitive.secret.SecretAbstract;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 数据库列-加密字段
 * 该注解有两种使用方式
 * ①：配合@SensitiveTable加在实体类中的字段上
 * ②：直接在Mapper中的方法参数上使用，如:List<UserEntity> listByPhone(@SensitiveField(Aes.class) @Param("mobile") String mobile);
 *
 * @author lyy
 * @see SensitiveTable
 */
@Documented
@Inherited
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface SensitiveField {
    /**
     * 继承SecretAbstract自定义加密方式
     *
     * @return Class 加密类
     */
    Class<? extends SecretAbstract> value();
}
